package com.springmvc.handler;

import org.springframework.beans.BeansException;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/** 自定义BeanId处理器映射器 */
@Component
public class BeanIdHandlerMapping implements HandlerMapping{

    /** 用来保存根据id定义的servlet实例 */
    static Map<String,Object> map = new HashMap<>();

    /** 根据beanId，获取servlet实例 */
    @Override
    public Object getHandler(String url) {

        return map.get(url);
    }

    /** 基于spring的扩展机制，在bean实例化之后，获取到通过beanId指定的servlet实例 */
    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
        // 由于通过s ervlet.xml配置的servlet,beanId都是以/开头，所以按照此规则获取servlet实例
        if (beanName.startsWith("/")) {
            map.put(beanName, bean);
        }
        return true;
    }
}
